Oracle 21C 21.3.0.0 RAC OEL8.6 升级

1 背景知识

本文主要介绍如何在 Oracle 21C RAC 上打最新补丁。

2 环境准备

2.1 上传补丁程序文件

  1. rac1 节点 : 上传至 rac1 节点的 /app/setup 目录。
#rac1#
p36352207_210000_Linux-x86-64.zip    #Grid Infrastrusture
p6880880_230000_Linux-x86-64.zip     #Opatch 
  1. rac2 节点 : 上传至 rac2 节点的 /app/setup 目录。
#rac1#root>
mkdir /app/setup
#rac2#
p36352207_210000_Linux-x86-64.zip    #Grid Infrastrusture
p6880880_230000_Linux-x86-64.zip     #Opatch 

2.2 解压文件

  1. 更改权限。
#rac1#root>
#rac2#root>
chown grid:oinstall /app/setup/ -R 
  1. rac1 节点 :
#rac1#root>
su - grid
#rac1#grid> 
cd /app/setup
rm -rf V1011496-01.zip #由于/app 磁盘空间不足
rm -rf V1011504-01.zip #由于/app 磁盘空间不足
unzip -q p36352207_210000_Linux-x86-64.zip
unzip -q p6880880_230000_Linux-x86-64.zip
  1. rac2 节点 :
#rac2#root>
su - grid
#rac2#grid> 
cd /app/setup
unzip -q p36352207_210000_Linux-x86-64.zip
unzip -q p6880880_230000_Linux-x86-64.zip
Note

  1. 两个补丁已经是Oracle 21.3.0.0 最后的修复补丁。
  2. 上传Opatch 补丁,需要上传23C 的 OPatch 补丁。

Warning

这里解压补丁文件必须使用 grid 用户,否则会无法读取补丁文件,造成补丁安装失败。

2.3 GI HOME 目录权限

确认grid 用户对于 GI HOME 目录具有可写权限。

#rac1#root>
#rac2#root>
chmod g+w /u01/app/grid/product/21.3.0/db_1/
Warning

第一,如果不更改此项权限,则会造成以下错误,
第二,请不要修改其他目录权限,防打补丁时出现其他错误。

Stack Description: java.lang.Exception: java.lang.RuntimeException: /app/setup/36352207/36352352/etc/config/actions.xml with java.lang.RuntimeException: java.lang.RuntimeException: Unzip failed
                                        at oracle.opatch.ZipUtilities.depressFiles(ZipUtilities.java:185)
                                        at oracle.opatch.ActionsFileParser.startElement(ActionsFileParser.java:881)
                                        at oracle.xml.parser.v2.NonValidatingParser.parseElement(NonValidatingParser.java:1701)
                                        at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:461)
                                        at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:407)
                                        at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:254)
                                        at oracle.xml.jaxp.JXSAXParser.parse(JXSAXParser.java:298)
                                        at oracle.opatch.ActionsFileParser.parseActionsContent(ActionsFileParser.java:110)
                                        at oracle.opatch.PatchObject.loadActionFile(PatchObject.java:3185)
                                        at oracle.opatch.PatchObject.createPatchObject(PatchObject.java:2743)
                                        at oracle.opatch.PatchObject.<init>(PatchObject.java:2223)
                                        at oracle.opatch.PatchObject.getInstance(PatchObject.java:7431)
                                        at oracle.opatch.opatchprereq.PQSession.checkConflictAgainstOHWithDetailAndPrint(PQSession.java:
2937)
                                        at oracle.opatch.opatchprereq.PQSession.checkConflictAgainstOHWithDetailAndPrint(PQSession.java:
2909)
                                        at oracle.opatch.opatchprereq.PQSession.checkconflictagainstohwithdetail(PQSession.java:2896)
                                        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                                        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                                        at java.lang.reflect.Method.invoke(Method.java:498)
                                        at oracle.opatch.PrereqSession.process(PrereqSession.java:242)
                                        at oracle.opatch.OPatchSession.process(OPatchSession.java:2760)
                                        at oracle.opatch.OPatch.process(OPatch.java:885)
                                        at oracle.opatch.OPatch.main(OPatch.java:942)

3 GI 升级OPatch

3.1 GI HOME 目录安装 OPatch

#rac1#root>
#rac1#root>
su - grid
#rac1#grid>
#rac2#grid>
rm -rf $ORACLE_HOME/OPatch/*
cd /app/setup
cp -R OPatch/*  $ORACLE_HOME/OPatch/

3.2 验证是否升级成功

#rac1#root>
#rac1#root>
su - grid
#rac1#grid>
#rac2#grid>
cd $ORACLE_HOME/OPatch
./opatch lsinventory
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2024, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/grid/product/21.3.0/db_1
Central Inventory : /u01/app/grid/oraInventory
   from           : /u01/app/grid/product/21.3.0/db_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.9.0
Log file location : /u01/app/grid/product/21.3.0/db_1/cfgtoollogs/opatch/opatch2024-05-29_11-21-58AM_1.log

Lsinventory Output file location : /u01/app/grid/product/21.3.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2024-05-29_11-21-58AM.txt
--------------------------------------------------------------------------------
Local Machine Information::
Hostname: node1
ARU platform id: 226
ARU platform description:: Linux x86-64

Installed Top-level Products (1): 

Oracle Grid Infrastructure 21c                                       21.0.0.0.0
There are 1 products installed in this Oracle Home.


There are no Interim patches installed in this Oracle Home.


--------------------------------------------------------------------------------

OPatch succeeded.
Note

目前 Oracle OPatch 的版本为 12.2.0.1.42

4 DB 升级Opatch

4.1 DB HOME 目录安装 OPatch

#rac1#root>
#rac2#root>
su - oracle
#rac1#oracle>
#rac2#oracle>
rm -rf $ORACLE_HOME/OPatch/*
cd /app/setup
cp -R OPatch/*  $ORACLE_HOME/OPatch/

4.2 验证是否升级成功

#rac1#root>
#rac1#root>
su - oracle
#rac1#oracle>
#rac2#oracle>
cd $ORACLE_HOME/OPatch
./opatch lsinventory
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2024, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/21.3.0/db_1
Central Inventory : /u01/app/grid/oraInventory
   from           : /u01/app/oracle/product/21.3.0/db_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.9.0
Log file location : /u01/app/oracle/product/21.3.0/db_1/cfgtoollogs/opatch/opatch2024-05-29_11-22-24AM_1.log

Lsinventory Output file location : /u01/app/oracle/product/21.3.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2024-05-29_11-22-24AM.txt
--------------------------------------------------------------------------------
Local Machine Information::
Hostname: node1
ARU platform id: 226
ARU platform description:: Linux x86-64

Installed Top-level Products (1): 

Oracle Database 21c                                                  21.0.0.0.0
There are 1 products installed in this Oracle Home.


There are no Interim patches installed in this Oracle Home.


--------------------------------------------------------------------------------

OPatch succeeded.
Note

目前 Oracle OPatch 的版本为 12.2.0.1.42

5 GI 补丁预检查

5.1 GI 补丁冲突预检查

5.1.1 创建补丁列表路径文件

创建 patch_list_gihome.txt 文件。

#rac1#root>
#rac2#root>
su - grid 
#rac1#grid>
#rac2#grid>
vi /tmp/patch_list_gihome.txt

//输入内容:
<UNZIPPED_PATCH_LOCATION>/36352207/36352352
<UNZIPPED_PATCH_LOCATION>/36352207/36360754
<UNZIPPED_PATCH_LOCATION>/36352207/36360764
<UNZIPPED_PATCH_LOCATION>/36352207/36360767
<UNZIPPED_PATCH_LOCATION>/36352207/36460255
<UNZIPPED_PATCH_LOCATION>/36352207/36115667

使用 VIM 编辑器进行批量替换。

:%s/<UNZIPPED_PATCH_LOCATION>/\/app\/setup/g

5.1.2 运行补丁冲突预检查

运行 OPatch 命令以检查是否有解决冲突 Grid Infrastructure 中可用。

#rac1#grid>
#rac2#grid>
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseFile /tmp/patch_list_gihome.txt 
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/grid/product/21.3.0/db_1
Central Inventory : /u01/app/grid/oraInventory
   from           : /u01/app/grid/product/21.3.0/db_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.9.0
Log file location : /u01/app/grid/product/21.3.0/db_1/cfgtoollogs/opatch/opatch2024-06-19_10-13-31AM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

5.2 GI 补丁空间预检查

5.2.1 创建补丁列表路径文件

创建 patch_list_gihome.txt 文件。

#rac1#root>
su - grid 
#rac1#grid>
vi /tmp/patch_list_gihome.txt

//输入内容:
<UNZIPPED_PATCH_LOCATION>/36352207/36352352
<UNZIPPED_PATCH_LOCATION>/36352207/36360754
<UNZIPPED_PATCH_LOCATION>/36352207/36360764
<UNZIPPED_PATCH_LOCATION>/36352207/36360767
<UNZIPPED_PATCH_LOCATION>/36352207/36460255
<UNZIPPED_PATCH_LOCATION>/36352207/36115667

使用 VIM 编辑器进行批量替换。

:%s/<UNZIPPED_PATCH_LOCATION>/\/app\/setup/g

5.2.2 运行补丁空间预检查

运行 OPatch 命令以检查是否有足够的可用空间并 Grid Infrastructure 中可用。

#rac1#grid>
#rac2#grid>
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/grid/product/21.3.0/db_1
Central Inventory : /u01/app/grid/oraInventory
   from           : /u01/app/grid/product/21.3.0/db_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.9.0
Log file location : /u01/app/grid/product/21.3.0/db_1/cfgtoollogs/opatch/opatch2024-05-29_11-22-52AM_1.log

Invoking prereq "checksystemspace"

Prereq "checkSystemSpace" passed.

OPatch succeeded.
Note

如果输出 OPatch succeeded. 则补丁能够成功运行。

6 DB 补丁预检查

6.1 DB 补丁冲突预检查

6.1.1 创建补丁列表路径文件

创建 /tmp/patch_list_dbhome.txt 文件。

su - oracle
#rac1#oracle>
#rac2#oracle>
vi /tmp/patch_list_dbhome.txt
//输入内容:
<UNZIPPED_PATCH_LOCATION>/36352207/36352352
<UNZIPPED_PATCH_LOCATION>/36352207/36360754

使用 VIM 编辑器进行批量替换。

:%s/<UNZIPPED_PATCH_LOCATION>/\/app\/setup/g

6.1.2 运行补丁冲突预检查

运行 OPatch 命令以检查是否有足够的可用空间并 Grid Infrastructure 中可用。

#rac1#oracle>
#rac2#oracle>
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseFile /tmp/patch_list_dbhome.txt
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/21.3.0/db_1
Central Inventory : /u01/app/grid/oraInventory
   from           : /u01/app/oracle/product/21.3.0/db_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.9.0
Log file location : /u01/app/oracle/product/21.3.0/db_1/cfgtoollogs/opatch/opatch2024-06-19_10-14-55AM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

6.2 DB 补丁空间预检查

6.2.1 创建补丁列表路径文件

创建 /tmp/patch_list_dbhome.txt 文件。

su - oracle
#rac1#oracle>
#rac2#oracle>
vi /tmp/patch_list_dbhome.txt

//输入内容:
<UNZIPPED_PATCH_LOCATION>/36352207/36352352
<UNZIPPED_PATCH_LOCATION>/36352207/36360754

使用 VIM 编辑器进行批量替换。

:%s/<UNZIPPED_PATCH_LOCATION>/\/app\/setup/g

6.2.2 运行补丁空间预检查

运行 OPatch 命令以检查是否有足够的可用空间并 Grid Infrastructure 中可用。

#rac1#oracle>
#rac2#oracle>
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt
Oracle Interim Patch Installer version 12.2.0.1.42
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/21.3.0/db_1
Central Inventory : /u01/app/grid/oraInventory
   from           : /u01/app/oracle/product/21.3.0/db_1/oraInst.loc
OPatch version    : 12.2.0.1.42
OUI version       : 12.2.0.9.0
Log file location : /u01/app/oracle/product/21.3.0/db_1/cfgtoollogs/opatch/opatch2024-05-29_11-23-15AM_1.log

Invoking prereq "checksystemspace"

Prereq "checkSystemSpace" passed.

OPatch succeeded.
Note

如果输出 OPatch succeeded. 则补丁能够成功运行。

7 RAC 打补丁升级

Warning

  1. 必须使用 root 用户调用并打补丁。
  2. 在群集中的每个个节点都需执行。

#rac1#root>
#rac2#root>
export PATH=$PATH:/u01/app/grid/product/21.3.0/db_1/OPatch
#rac1#root>
#rac2#root>
cd /u01/app/grid/product/21.3.0/db_1/OPatch
./opatchauto apply /app/setup/36352207

7.1 编译无效对象

#rac1#oracle>
cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> startup
alter pluggable database all open;
#rac2#oracle>
cd $ORACLE_HOME/OPatch
./datapatch -sanity_checks
./datapatch -verbose

8 小结 & FAQ

这里展示了一些 Oracle opatchauto 命令的其他方式。

  1. 修补 GI 主目录和所有 Oracle RAC 数据库主目录相同版本:
opatchauto apply <UNZIPPED_PATCH_LOCATION>/36352207
  1. 要仅修补 GI 主目录:
opatchauto apply <UNZIPPED_PATCH_LOCATION>/36352207 -oh <GI_HOME>
  1. 要修补一个或多个 Oracle RAC 数据库主目录,请执行以下操作:
opatchauto apply <UNZIPPED_PATCH_LOCATION>/36352207 -oh <oracle_home1_path>,<oracle_home2_path>
  1. 从 GI 主目录和每个 Oracle RAC 回滚修补程序数据库主页:
opatchauto rollback <UNZIPPED_PATCH_LOCATION>/33583921 
  1. 要从 GI 主页回滚补丁:
opatchauto rollback <UNZIPPED_PATCH_LOCATION>/36352207 -oh <path to GI home>  
  1. 要从 Oracle RAC 数据库主页回滚修补程序,请执行以下操作:
opatchauto rollback <UNZIPPED_PATCH_LOCATION>/36352207 -oh <oracle_home1_path>,<oracle_home2_path>